package com.gwu.manger.dto;

import java.util.ArrayList;
import java.util.List;

public enum ResultCode {
    /* 成功状态码 */
    SUCCESS(0, "成功"),
    SYS_ERROR(-1,"系统异常"),
    /* 参数错误：10001-19999 */
    PARAM_IS_INVALID(10001, "参数无效"),
    PARAM_IS_BLANK(10002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
    PARAM_NOT_COMPLETE(10004, "参数缺失"),
    
    MOBILE_CODE_INVALID(10009, "验证码不正确"), // 手机验证码校验错误。
    MOBILE_DECODE_ERROR(10010, "解密手机号码失败"), // 解密手机号码失败。
    
    TOKEN_DISABLE_ERROR(10011, "请重新登录"), // token失效，请重新登录
    TOKEN_NULL_ERROR(10012, "token 需要传入"), // token 没有传入。
    USER_NOT_EXISTS_ERROR(10013, "用户不存在，请先授权"), // 用户不存在。
    OPENID_NULL_ERROR(10014, "SessionKey获取openid超时60秒。openid 获取不到"), // 
    MOBILE_OPENID_ERROR(10015, "授权Openid 和系统 是不一致"), // 授权Openid 和系统 是不一致，查log
    MOBILE_NOT_SAME_ERROR(10016, "手机号存在已授权用户，但是和用户设置号码不一致"), // 存在已授权用户，但是和用户设置号码不一致
    
    MEMBER_NEEDED_ERROR(10017, "需要注册会员"), // 功能需要注册会员。
    
    REFUND_CANCEL_ERROR(10018, "退款中，不可取消"), // 手机验证码校验错误。
    REFUND_UPDATE_ERROR(10019, "退款已审批，不可编辑"), // 手机验证码校验错误。
    
    
    PAY_SERVER_ERROR(11001, "支付网络服务异常"), // 支付网络异常,服务器异常
    PAY_STATUS_ERROR(11002, "支付状态错误"), // 支付状态错误
    PAY_ORDERNO_ERROR(11003, "支付订单号错误"), // 支付订单号错误
    MEMBER_AMOUNT_NOT_ENGOTH(11004, "会员余额不足"), // 功能需要注册会员会员不足。
    
    
    ADD_ORDER_ERROR(12001, "库存不足"), //库存不足。
    ORDER_NOT_EXITSERROR(12002, "订单不存在"), //找不到订单。
    NO_TIMES_LUCKY(12003,"当日次数已用尽"),
    NO_BONUS_LUCKY(12004,"积分不足"),
    ORDER_LIMIT_ERROR(12005, "超出限购数量"), //库存不足。
    COUPON_INVALID_ERROR(12006, "优惠不可用"), //优惠卷信息不匹配
    
    NEED_AUTH(10005, "需要认证");

    private Integer code;

    private String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return this.code;
    }

    public String message() {
        return this.message;
    }

    public static String getMessage(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.message;
            }
        }
        return name;
    }

    public static Integer getCode(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.code;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return this.name();
    }

    //校验重复的code值
    public static void main(String[] args) {
        ResultCode[] ApiResultCodes = ResultCode.values();
        List<Integer> codeList = new ArrayList<Integer>();
        for (ResultCode ApiResultCode : ApiResultCodes) {
            if (codeList.contains(ApiResultCode.code)) {
                System.out.println(ApiResultCode.code);
            } else {
                codeList.add(ApiResultCode.code());
            }
        }
    }
}
